package dao

import (
	"time"
)

// 这是 Feed 的全局公开dao对象，被service层调用!
var FeedDao = feedDao{}

// 网站关键资源动态表
// 这是 feed表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Feed struct {
	Id            int32     `json:"id" form:"id" db:"id" v:"id"`
	Title         string    `json:"title" form:"title" db:"title" v:"title"`                                         // 标题
	ObjType       int8      `json:"obj_type" form:"obj_type" db:"obj_type" v:"obj_type"`                             // 类型,0-主题;1-文章;2-资源;3-wiki;4-project
	ObjId         int32     `json:"obj_id" form:"obj_id" db:"obj_id" v:"obj_id"`                                     // 对象id
	Uid           int32     `json:"uid" form:"uid" db:"uid" v:"uid"`                                                 // 发布人uid
	Author        string    `json:"author" form:"author" db:"author" v:"author"`                                     // 外站作者
	Nid           int32     `json:"nid" form:"nid" db:"nid" v:"nid"`                                                 // 主题的nid或资源的catid
	LastReplyUid  int32     `json:"last_reply_uid" form:"last_reply_uid" db:"last_reply_uid" v:"last_reply_uid"`     // 最后回复者
	LastReplyTime time.Time `json:"last_reply_time" form:"last_reply_time" db:"last_reply_time" v:"last_reply_time"` // 最后回复时间
	Tags          string    `json:"tags" form:"tags" db:"tags" v:"tags"`                                             // tag，逗号分隔
	CmtNum        int32     `json:"cmt_num" form:"cmt_num" db:"cmt_num" v:"cmt_num"`                                 // 评论数
	LikeNum       int32     `json:"like_num" form:"like_num" db:"like_num" v:"like_num"`                             // 喜欢(赞)数
	Top           int8      `json:"top" form:"top" db:"top" v:"top"`                                                 // 置顶，0否，1置顶
	Sort          int32     `json:"sort" form:"sort" db:"sort" v:"sort"`                                             // 排序用，越大越靠前
	Status        int8      `json:"status" form:"status" db:"status" v:"status"`                                     // 状态：0-正常；1-下线
	CreatedAt     time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`                     // 创建时间
	UpdatedAt     time.Time `json:"updated_at" form:"updated_at" db:"updated_at" v:"updated_at"`                     // 最后更新时间(这是一个自动更新的时间列)

}

// 注意:这是 Feed 的私有dao对象，只能在dao层内使用!
type feedDao struct {
	InsertTemplate func(arg Feed) (int64, error)      //插入一条记录
	UpdateTemplate func(arg Feed) (int64, error)      //更新一条记录
	DeleteTemplate func(id int64) (int64, error)      `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Feed, error)       `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg FeedList) ([]Feed, error) //模糊分页查询
}

/*
// 这是 feed 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type FeedPostman struct {
id
title
obj_type
obj_id
uid
author
nid
last_reply_uid
last_reply_time
tags
cmt_num
like_num
top
sort
status
created_at
updated_at

}*/

// 这是 feed 表的批量请求参数
type FeedReq struct {
	List []Feed `json:"list" form:"list"`
}

// 这是 feedDao.List()方法的请求参数
type FeedList struct {
	Page
}
